﻿#ifndef All_SORT_H
#define All_SORT_H

#include <assert.h>
#include <iostream>
using namespace std;

#define	IS_PRINT 1

#define	BUBBLE_SORT 1
#define	QUICK_SORT 1
#define	INSERT_SORT_0 1
#define	INSERT_SORT_1 1
#define	SHELL_SORT_0 1
#define	SHELL_SORT_1 1

#define countof_macro(x) (sizeof((x)) / sizeof(x)[0])

class Allsort
{
public:
	void BubbleSort(int arr[], int size);//冒泡排序
	void QuickSort(int A[], int startingsub, int endingsub);//快速排序
	void InsertionSort(int L[] ,int n);//代码简洁版插入排序
	void Insertsort1(int L[], int n);//严格定义版插入排序
	void Shellsort(int L[],  int n);//严格定义版希尔排序
	void ShellsortSimple(int L[], int n);//代码简洁版希尔排序
	void CountingSort(int L[], int n);//计数排序
	int getDigit(int num, int dig);//基数排序中获取第dig位的数字
	void RadixSort(int L[], int left, int right, int d);//基数排序
	void printArray(const int Array[], int arraySize,int flag);//输出数组

private:
	//辅助函数
	void swap(int *list, int low, int high);
	bool islow(const int low, int high);

};

#endif